package com.cy.java.oop;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ObjectTests {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        //构建对象(传统方式)
        Object o1=new Object();
        //构建对象(反射方式-API->不能预知未来，但可以驾驭未来)
        //反射的起点是谁？class类型的对象
        //如何获取class类型的对象？(class类型的对象又称之为字节码对象，一个jvm只能有一份)
        //1.通过类名.class
        Class c1=Object.class;//需要在编译时就知道Object类
        //2.通过对象实例.getClass
        Class c2=o1.getClass();//需要在编译时就知道Object类
        //3.通过Class.forName
        Class c3=Class.forName("java.lang.Object");
        System.out.println(c1==c2);
        System.out.println(c2==c3);
        //通过字节码对象获取无参构造方法对象
        Constructor constructor=c3.getConstructor();//getConstructor(Class<?>... parameterTypes)
        //通过构造方法对象构建类的实例对象
        Object o2=constructor.newInstance();//newInstance(Object ... initargs)
    }
}
